home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 6 / QRZ Ham Radio Callsign Database - Volume 6.iso / mac / files / finland / ddlcpack.lzh / DDLCTEST.C < prev    next >
C/C++ Source or Header  |  1993-01-06  |  6KB  |  294 lines

  1. #include <stdio.h>
  2. typedef unsigned short int16;
  3. typedef unsigned char u_char;
  4. #define PTRTYPE u_char
  5. #define VAL 0xA55A
  6.  
  7. #define NO_NOS_PARTS
  8. /*#include "ddlc.h"*/
  9.  
  10.  
  11. unsigned long BASE = 0xE0000000L;
  12.  
  13. unsigned int  cgetw(addr)
  14. void far *addr;
  15. {
  16.     asm les bx,dword ptr addr;
  17.     asm mov al,byte ptr es:[bx+0];
  18.     asm mov ah,byte ptr es:[bx+0x400];
  19.     asm mov ah,byte ptr es:[bx+1];
  20. }
  21.  
  22. void cputw(addr,val)
  23. void far *addr; unsigned int val;
  24. {
  25.     asm les bx,dword ptr addr;
  26.     asm mov ax,word ptr val;
  27.     asm mov byte ptr es:[bx+0],al;
  28.     asm mov al,byte ptr es:[bx+0x400];
  29.     asm mov byte ptr es:[bx+1],ah;
  30. }
  31.  
  32.  
  33. typedef struct ValCnt { unsigned int val; unsigned int cnt; } ValCnt;
  34. ValCnt valcnt[100];
  35. int valcntC = 0;
  36.  
  37. void regValCnt (val)
  38. unsigned int val;
  39. {
  40.     int i;
  41.  
  42.     for (i=0;i<valcntC;++i) {
  43.         if (valcnt[i].val == val) {
  44.             valcnt[i].cnt += 1;
  45.             return;
  46.         }
  47.     }
  48.     valcnt[valcntC].val = val;
  49.     valcnt[valcntC].cnt = 1;
  50.     valcntC += 1;
  51. }
  52.  
  53. void
  54. prtValCnt()
  55. {
  56.     int i;
  57.     for (i=0;i<valcntC;++i)
  58.         printf("  0x%04X - %4d\n",valcnt[i].val,valcnt[i].cnt);
  59. }
  60.  
  61. void
  62. tester()
  63. {
  64.     register unsigned int count1;
  65.     unsigned int count2;
  66.     unsigned int maxcount = 10000;
  67.  
  68.     for (count2=maxcount; count2>0; --count2) {
  69.         for (count1=maxcount; count1>0; --count1) {
  70.             (void) cgetw(BASE);
  71.         }
  72.     }
  73.  
  74.     exit(0);
  75. }
  76.  
  77.  
  78. main(argc,argv)
  79. int argc;
  80. char *argv[];
  81. {
  82.     u_char far *buf;
  83.     int16  far *bufw;
  84.     int16    i, val, failcnt, topcount, fail2cnt;
  85.     volatile int16 far *delay = (int16*)0x20000000L;
  86.  
  87.     if (sizeof(char*) != 4) {
  88.         printf("Sorry, this has not been compiled with LARGE memory model!\n");
  89.         exit(99);
  90.     }
  91.  
  92.     if (argc!=1 && argc != 3) {
  93.         printf("\
  94. DDLCTEST.EXE: [-s SEG]  -- Tests DDLC-card buffer memory and partially chips\n\
  95.                            Optional argument defines segment where card resides\n");
  96.         return 1;
  97.     }
  98. #define htoi(x) strtoul(x,NULL,16)
  99.     if (strcmp(argv[1],"-t")==0) tester();
  100.     if (argc==3)
  101.         BASE = ((unsigned long)htoi(argv[2])) << 16;
  102.  
  103.     topcount = 32000;
  104.     buf  = (u_char far *)(BASE+0x0200L);
  105.     bufw = (int16 far *)buf;
  106.  
  107.     failcnt = 0;
  108.     for (i=topcount;i>0;--i) {
  109.         *buf = 0;
  110.         *buf = 0xA5;
  111.         *buf = 0x5A;
  112.         val  = *buf;
  113.         if (val != 0x5A)
  114.             ++failcnt;
  115.     }
  116.     printf("DDLC SRAM char access (%Fp)\n",buf);
  117.     printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
  118.  
  119.     failcnt = 0;
  120.     for (i=topcount;i>0;--i) {
  121.         *buf = 0;
  122.         *buf = 0xA5;
  123.         val  = *delay;
  124.         *buf = 0x5A;
  125.         val  = *delay;
  126.         val  = *buf;
  127.         if (val != 0x5A)
  128.             ++failcnt;
  129.     }
  130.     printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
  131.     failcnt = 0;
  132.     for (i=topcount;i>0;--i) {
  133.         *bufw = 0;
  134.         *bufw = 0xA55A;
  135.         *bufw = 0x5AA5;
  136.         val  = *bufw;
  137.         if (val != 0x5AA5)
  138.             ++failcnt;
  139.     }
  140.     printf("DDLC SRAM word access (%Fp)\n",bufw);
  141.     printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
  142.  
  143.     failcnt = 0;
  144.     valcntC = 0;
  145.     for (i=topcount;i>0;--i) {
  146.         *bufw = 0;
  147.         *bufw = 0xA55A;
  148.         val  = *delay;
  149.         *bufw = 0x5AA5;
  150.         val  = *delay;
  151.         val  = *bufw;
  152.         regValCnt(val);
  153.         if (val != 0x5AA5)
  154.             ++failcnt;
  155.     }
  156.     printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
  157.     prtValCnt();
  158.  
  159.     buf  = (u_char far *)(BASE+0x02AL);
  160.     bufw = (int16 far *)buf;
  161.  
  162.     printf("DDLC register char access (%Fp)\n",buf);
  163.     failcnt = 0;
  164.     for (i=topcount;i>0;--i) {
  165.         *buf = 0;
  166.         *buf = 0xA5;
  167.         *buf = 0x5A;
  168.         val  = *buf;
  169.         if (val != 0x5A)
  170.             ++failcnt;
  171.     }
  172.     printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
  173.  
  174.     failcnt = 0;
  175.     for (i=topcount;i>0;--i) {
  176.         *buf = 0;
  177.         *buf = 0xA5;
  178.         val  = *delay;
  179.         *buf = 0x5A;
  180.         val  = *delay;
  181.         val  = *buf;
  182.         if (val != 0x5A)
  183.             ++failcnt;
  184.     }
  185.     printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
  186.  
  187.     printf("DDLC register word access (%Fp)\n",bufw);
  188.     failcnt = 0;
  189.     for (i=topcount;i>0;--i) {
  190.         *bufw = 0;
  191.         *bufw = 0xA55A;
  192.         *bufw = 0x5AA5;
  193.         val  = *bufw;
  194.         if (val != 0x5AA5)
  195.             ++failcnt;
  196.     }
  197.     printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
  198.  
  199.     failcnt = 0;
  200.     for (i=topcount;i>0;--i) {
  201.         *bufw = 0;
  202.         *bufw = 0xA55A;
  203.         val  = *delay;
  204.         *bufw = 0x5AA5;
  205.         val  = *delay;
  206.         val  = *bufw;
  207.         if (val != 0x5AA5)
  208.             ++failcnt;
  209.     }
  210.     printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
  211.  
  212.     failcnt=0; valcntC=0;
  213.     for(i=topcount;i>0;--i) {
  214.         cputw(buf,0);
  215.         cputw(buf,0xA55A);
  216.         cputw(buf,0x5AA5);
  217.         val = cgetw(buf);
  218.         regValCnt(val);
  219.         if (val != 0x5AA5)
  220.             ++failcnt;
  221.     }
  222.     printf(" cgetw()  failure rate: %d/%d\n",failcnt,topcount);
  223.     prtValCnt();
  224.  
  225.     buf  = (u_char far *)(BASE+0x02AL+0x080L);
  226.     bufw = (int16 far *)buf;
  227.  
  228.     printf("DDLC chip 2 register char access (%Fp)\n",buf);
  229.     failcnt = 0;
  230.     for (i=topcount;i>0;--i) {
  231.         *buf = 0;
  232.         *buf = 0xA5;
  233.         *buf = 0x5A;
  234.         val  = *buf;
  235.         if (val != 0x5A)
  236.             ++failcnt;
  237.     }
  238.     printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
  239.  
  240.     failcnt = 0;
  241.     for (i=topcount;i>0;--i) {
  242.         *buf = 0;
  243.         *buf = 0xA5;
  244.         val  = *delay;
  245.         *buf = 0x5A;
  246.         val  = *delay;
  247.         val  = *buf;
  248.         if (val != 0x5A)
  249.             ++failcnt;
  250.     }
  251.     printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
  252.  
  253.     printf("DDLC register word access (%Fp)\n",bufw);
  254.     failcnt = 0;
  255.     for (i=topcount;i>0;--i) {
  256.         *bufw = 0;
  257.         *bufw = 0xA55A;
  258.         *bufw = 0x5AA5;
  259.         val  = *bufw;
  260.         if (val != 0x5AA5)
  261.             ++failcnt;
  262.     }
  263.     printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
  264.  
  265.     failcnt = 0;
  266.     for (i=topcount;i>0;--i) {
  267.         *bufw = 0;
  268.         *bufw = 0xA55A;
  269.         val  = *delay;
  270.         *bufw = 0x5AA5;
  271.         val  = *delay;
  272.         val  = *bufw;
  273.         if (val != 0x5AA5)
  274.             ++failcnt;
  275.     }
  276.     printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
  277.  
  278.     failcnt=0; fail2cnt = 0; valcntC = 0;
  279.     for(i=topcount;i>0;--i) {
  280.         cputw(buf,0);
  281.         cputw(buf,0xA55A);
  282.         cputw(buf,0x5AA5);
  283.         val = cgetw(buf);
  284.         if (val != cgetw(buf)) ++fail2cnt;
  285.         if (val != 0x5AA5)
  286.             ++failcnt;
  287.         regValCnt(val);
  288.     }
  289.     printf(" cgetw()  failure rate: %d (%d)/%d\n",failcnt,fail2cnt,topcount);
  290.     prtValCnt();
  291.  
  292.     return 0;
  293. }
  294.